package com.school.sports.util;

import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;

/**
 * 密码生成工具类
 * 用于生成加密后的密码，方便数据库初始化使用
 *
 * @author System
 * @since 2025-10-13
 */
public class PasswordGeneratorUtil {

    private static final BCryptPasswordEncoder encoder = new BCryptPasswordEncoder();

    /**
     * 主方法，用于测试和生成密码
     *
     * @param args 命令行参数
     */
    public static void main(String[] args) {
        String password = "123456";

        System.out.println("=== 密码生成工具 ===");
        System.out.println("原始密码: " + password);

        // 生成加密后的密码
        String hashedPassword = encoder.encode(password);
        System.out.println("加密后的密码: " + hashedPassword);

        // 测试验证
        boolean matches = encoder.matches(password, hashedPassword);
        System.out.println("密码验证结果: " + matches);

        System.out.println();
        System.out.println("=== 其他常用密码示例 ===");
        generatePasswordExamples();
    }

    /**
     * 生成常用密码的加密示例
     */
    private static void generatePasswordExamples() {
        String[] commonPasswords = {"123456", "admin", "password", "111111", "123123"};

        for (String pwd : commonPasswords) {
            String hashed = encoder.encode(pwd);
            System.out.println("密码: " + pwd + " -> 哈希: " + hashed);
        }
    }

    /**
     * 生成指定密码的哈希值
     *
     * @param password 原始密码
     * @return 加密后的密码哈希
     */
    public static String generatePasswordHash(String password) {
        return encoder.encode(password);
    }

    /**
     * 验证密码是否匹配
     *
     * @param rawPassword 原始密码
     * @param hashedPassword 加密后的密码
     * @return 匹配结果
     */
    public static boolean verifyPassword(String rawPassword, String hashedPassword) {
        return encoder.matches(rawPassword, hashedPassword);
    }

    /**
     * 生成随机密码并加密
     *
     * @param length 密码长度
     * @return 加密后的随机密码
     */
    public static String generateAndEncodeRandomPassword(int length) {
        String chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*";
        StringBuilder password = new StringBuilder();

        for (int i = 0; i < length; i++) {
            int index = (int) (Math.random() * chars.length());
            password.append(chars.charAt(index));
        }

        String randomPassword = password.toString();
        String hashedPassword = encoder.encode(randomPassword);

        System.out.println("生成的随机密码: " + randomPassword);
        System.out.println("加密后的密码: " + hashedPassword);

        return hashedPassword;
    }
}